import PizZip from 'pizzip'
import docxtemplater from 'docxtemplater'
import JSZipUtils from 'jszip-utils'
import {
	saveAs
} from 'file-saver'
import html2canvas from 'html2canvas'
import JsPDF from 'jspdf'
import $ from 'jquery'
import { downloadPDF } from '../utils/html2canvas';


/**
 * 2022-03-23T18:41:56 => 2022-03-23
 * yyyy-MM-dd
 */
export const ymdhmsToYmd =(time) =>{
    return time.substr(0,10);
}

 
/**
 * 将base64格式的数据转为ArrayBuffer
 * @param {Object} dataURL base64格式的数据
 */
export function base64DataURLToArrayBuffer(dataURL) {
	const base64Regex = /^data:image\/(png|jpg|jpeg|svg|svg\+xml);base64,/;
	if (!base64Regex.test(dataURL)) {
		return false;
	}
	const stringBase64 = dataURL.replace(base64Regex, "");
	let binaryString;
	if (typeof window !== "undefined") {
		binaryString = window.atob(stringBase64);
	} else {
		binaryString = new Buffer(stringBase64, "base64").toString("binary");
	}
	const len = binaryString.length;
	const bytes = new Uint8Array(len);
	for (let i = 0; i < len; i++) {
		const ascii = binaryString.charCodeAt(i);
		bytes[i] = ascii;
	}
	return bytes.buffer;
}

/**
 * 将图片的url路径转为base64路径
 * 可以用await等待Promise的异步返回
 * @param {Object} imgUrl 图片路径
 */
 export function getBase64Sync(imgUrl) {	
	return new Promise(function(resolve, reject) {
		// 一定要设置为let，不然图片不显示
		let image = new Image();
		// 解决跨域问题
		image.crossOrigin = 'anonymous';
		//图片地址
		image.src = imgUrl;
		// image.onload为异步加载
		image.onload = function() {
			let canvas = document.createElement("canvas");
			canvas.width = image.width;
			canvas.height = image.height;
			let context = canvas.getContext("2d");
			context.drawImage(image, 0, 0, image.width, image.height);
			//图片后缀名
			let ext = image.src.substring(image.src.lastIndexOf(".") + 1).toLowerCase();
			//图片质量
			let quality = 0.8;
			//转成base64
			let dataurl = canvas.toDataURL("image/" + ext, quality);
			//返回
			resolve(dataurl);
		};
	})
}

/**
 * 使用XMLHttpRequest进行图片二次下载
 * @param imgDom {Objec}  target object
 * @param cb{Object}success callback
 */
 function downloadByXmlhttprequest(imgDom,cb){

	var xhr = new XMLHttpRequest()

	xhr.onreadystatechange = function () {
		
		if(xhr.readyState === 4){
		
			// 使用URL.createObjectURL将Blob对象转换为可访问的url地址
			var src = URL.createObjectURL(xhr.response)
			imgDom.src = src
			cb(src)
			console.log(src);
		}
	}
	
	xhr.open('GET',imgDom.src, true)
	xhr.withCredentials = true;
	// 设置响应数据格式为Blob对象
	xhr.responseType = 'blob'
	
	// 设置请求头
	xhr.setRequestHeader('X-Requested-With', 'OpenAPIRequest',"content-type", "application/x-www-form-urlencoded")
	
	xhr.send()
}

function imgConvert(targetElem,cb){
	var svgElem = targetElem.find('img')
	svgElem.each(function(index, node) {
	  var parentNode = node.parentNode
	  downloadByXmlhttprequest(node,cb)
	})
  
}

function executeDown(copyDom,reSumeName){
	html2canvas(copyDom, {
	  onrendered: function(canvas) {
		var imgData = canvas.toDataURL('image/jpeg')
		var img = new Image()
		img.src = imgData
		// 根据图片的尺寸设置pdf的规格，要在图片加载成功时执行，之所以要*0.225是因为比例问题
		img.onload = function() {
		  // 此处需要注意，pdf横置和竖置两个属性，需要根据宽高的比例来调整，不然会出现显示不完全的问题
		  if (this.width > this.height) {
			var doc = new jsPDF('l', 'mm', [this.width * 0.225, this.height * 0.225])
		  } else {
			var doc = new jsPDF('p', 'mm', [this.width * 0.225, this.height * 0.225])
		  }
		  doc.addImage(imgData, 'jpeg', 0, 0, this.width * 0.225, this.height * 0.225)
		  // 根据下载保存成不同的文件名
		  doc.save(reSumeName + '-简历' + '.pdf')
		}
		// 删除复制出来的div
		copyDom.remove()
	  },
	  background: '#FFF',
	  // 这里给生成的图片默认背景，不然的话，如果你的html根节点没设置背景的话，会用黑色填充。
	  allowTaint: true // 避免一些不识别的图片干扰，默认为false，遇到不识别的图片干扰则会停止处理html2canvas
	})
}

export const PdfDownload = function(domId) {
	var targetDom = $('#'+domId)
	// 把需要导出的pdf内容clone一份，这样对它进行转换、微调等操作时才不会影响原来界面
	var copyDom = targetDom.clone()
	// 新的div宽高跟原来一样，高度设置成自适应，这样才能完整显示节点中的所有内容（比如说表格滚动条中的内容）
	copyDom.width(targetDom.width() + 'px')
	copyDom.height(targetDom.height()+200 + 'px')
  
	$('body').append(copyDom)// ps:这里一定要先把copyDom append到body下，然后再进行后续的glyphicons2canvas处理，不然会导致图标为空
  
	// svg2canvas(copyDom)
	// loadImg(copyDom)
	imgConvert(copyDom,function(res){
	  	downloadPDF(copyDom,reSumeName)
	})
  
}